HightouchのModelにdbt Modelを定義してみた
さがらです。
Hightouchでは転送したいデータをModelとして定義しますが、dbtと連携してdbtのModelを定義することが可能です。
実際に試してみたので、本記事でその内容をまとめてみます。
事前準備
使用しているDWHをSourcesとして定義
dbtと連携するときは、HightouchのSources
ではなくExtensions
から定義します。
そのため、別途dbtでテーブルを生成しているDWHはSources
として定義が必要です。
私の場合は、実際にdbtでテーブルを生成しているDWHがSnowflakeだったので、HightouchのSources
でSnowflakeを事前に定義しました。
dbtのリモートリポジトリを準備
HightouchでdbtのModelを定義するためには、dbtのコードを管理しているリモートリポジトリと連携する必要があります。
今回私はGitHubを使用しますが、事前にリモートリポジトリは準備しておきましょう。
(GitHubの場合)SSHキーかPersonal access tokenの準備
GitHubと連携する場合はSSHキーかPersonal access tokenが必要となります。事前に準備しておきましょう。
Extensionsでdbt用のリモートリポジトリを保持するGitサービスと連携
事前準備が終わったら、Hightouch上で設定をしていきましょう。
まず、画面左のメニューからExtensions
を押します。
続いて、dbt models
を押します。
Configure extension
を押します。
Git credentials
のSet up
を押します。
Gitサービスを選択し、Credentialの情報を入れるポップアップが表示されます。必要な情報を入力し、Save
を押します。
対象のSourcesとdbtのリモートリポジトリを連携
続いて、事前に定義したSourcesと前工程で設定したdbt用のGitリモートリポジトリを紐づけます。
Extensions
のConfiguration
タブから、連携したいSourcesを押します。
設定画面が出てくるので、順番に設定していきます。
まず、dbt Model Sync
を有効化します。
Repository
でどのリポジトリを使用するか選択し、Branch
でどのブランチを使用するのか選択します。
dbt Version
は、参照先のリポジトリが使用しているdbtのバージョンを選択します。
Default schema
は、このSourcesとなっているデータベースにおいて、どのスキーマがdbtの出力先となっているかを入力します。出力先のスキーマを複数に分けている場合は、Hightouchで使用したいテーブル・ビューを持つスキーマを入力ください。
dbt project path
は、dbt_project.yml
のファイルパスを入力します。デフォルトから変えていなければ、./dbt_project.yml
と入力しましょう。
dbt Selector
はオプションですが、対象のdbt projectにおいて、Hightouch用のModelにTagを付けている場合は、tag:
と入れると、対象のModelだけを表示することができます。
Custom target
はオプションですが、Hightouchからdbtが実行されるときはtarget nameがprod
となるため、任意のtarget nameにしたい場合は入力しましょう。
Custom environment variables
はオプションですが、任意の環境変数を指定したい場合は設定しましょう。
これらの設定が終わったら、右上のSave
を押します。
すると、Hightouchに対してdbtのModelを同期するため、Full resync
ボタンが押せるようになるため、これを押します。同期中はFull resync
ではなく読み込み中のアイコンが表示され、完了するとまたFull resync
が表示されます。私の場合は3分ほどかかりました。
これで、準備は完了です!
ModelsからdbtのModelを選択してみる
最後に、ちゃんとModelsからdbtのModelを選択できるかを確認してみます。
新しいModelの作成時に、Sourceはdbtのコードを保持するリモートリポジトリと連携したSourceを選択します。
その後、dbt model
を選択します。
dbtのModelが選択できるようになっていました!DescriptionやRepositoryのURLまでわかるのはありがたいですね。
あとは、通常通りModelとして設定してあげて、任意のDestinationにSyncさせればOKです!
最後に
HightouchのModelにdbt Modelを定義してみました。
Hightouchとdbtと連携については、他にも多くの機能があるためその機能も検証予定です!